package com.jade.bss.ec.order;

import java.util.List;

import com.jade.framework.base.criterion.Criteria;
import com.jade.framework.base.util.PagingList;

/**
 * 订单管理接口.
 */
public interface OrderManager
{
    /**
     * 添加订单。
     *
     * @param operatorType 创建者类型
     * @param operator 创建者
     * @param order 订单对象
     * @throws OrderException 处理异常。
     */
    public void create(String operatorType, String operator, ECOrder order)
            throws OrderException;

    /**
     * 更新订单信息。
     *
     * @param operatorType 操作者类型
     * @param operator 操作者
     * @param order 订单对象
     * @throws OrderException 处理异常。
     */
    public void update(String operatorType, String operator, ECOrder order)
            throws OrderException;

    /**
     * 取消订单信息。
     *
     * @param operatorType 操作者类型
     * @param operator 操作者
     * @param ids 订单标识。
     * @throws OrderException 处理异常。
     */
    public void cancel(String operatorType, String operator, String remark, long... ids)
            throws OrderException;

    /**
     * 订单支付完成。
     *
     * @param operatorType 操作者类型
     * @param operator 操作者
     * @param id 订单标识。
     * @param remark 备注说明
     * @throws OrderException 处理异常。
     */
    public void paid(String operatorType, String operator, long id, String remark)
            throws OrderException;

    /**
     * 运输配送过程，可能分为多个操作,对应不用的状态。
     *
     * @param operatorType 操作者类型
     * @param operator 操作者
     * @param id 订单标识。
     * @param remark 备注说明
     * @throws OrderException 处理异常。
     */
    public void delivery(String operatorType, String operator, long id, String op, int status, String remark)
            throws OrderException;

    /**
     * 订单服务完成。
     *
     * @param operatorType 操作者类型
     * @param operator 操作者
     * @param id 订单标识。
     * @param remark 备注说明
     * @throws OrderException 处理异常。
     */
    public void finished(String operatorType, String operator, long id, String remark)
            throws OrderException;

    /**
     * 删除订单信息。
     *
     * @param ids 订单标识。
     * @throws OrderException 处理异常。
     */
    public void remove(String operatorType, String operator, String remark, long... ids)
            throws OrderException;

    /**
     * 获取订单详情。
     *
     * @param id 订单标识。
     * @return 订单对象
     * @throws OrderException 处理异常。
     */
    public ECOrder get(long id)
            throws OrderException;

    /**
     * 查询客户订单信息。
     *
     * @param ownerType 订单所有者类型
     * @param ownerId 订单所有者标识
     * @param criteria 查询条件
     * @return 订单列表。
     */
    public PagingList<ECOrder> query(String ownerType, String ownerId, Criteria criteria);

    /**
     * 查询订单信息。
     *
     * @param criteria 订单查询条件
     * @return 订单列表
     */
    public PagingList<ECOrder> query(Criteria criteria);

//    /**
//     * 添加跟踪记录。
//     *
//     * @param records 跟踪记录
//     */
//    public void addTrace(TraceRecord... records);

    /**
     * 查询订单跟踪信息。
     *
     * @param orderId 订单标识
     * @return 跟踪记录。
     */
    public List<TraceRecord> listTrace(long orderId);

}
